package com.hanamaki.demo03;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.util.concurrent.TimeUnit;

/**
 * 1. 测试 selenium中的等待时间
 * 等待时间：前一个动作到执行下一个动作所需要花费的时间
 */
public class SeleniumTemplate04 {

    //注册驱动
    /**
     * driver代表浏览器对象
     */
    WebDriver driver;

    @BeforeMethod
    public void setUp() {
        //注册本地火狐打开的位置
        System.setProperty("webdriver.gecko.driver", "C:\\Program Files\\Mozilla Firefox\\geckodriver.exe");
        //初始化
        driver = new FirefoxDriver();
    }

    /* 固定等待（强制等待） */
    @Test
    public void test() throws InterruptedException {

        driver.get("file:///C:/Users/edz/Desktop/testhtml/exam/index.html");

        /* 添加强制等待 */
        Thread.sleep(5000);

        /* 定位 网页中 继续提供房源信息 */
        WebElement element = driver.findElement(By.xpath("//a[@href='House.html']"));
        element.click();

    }

    /* 显示等待 :
     * 是为某一个元素添加等待时间
     * 如果在时间范围之内未找到 就一直等待，如果在等待时间范围之内找到了，就直接运行
     * */
    @Test
    public void t1() {

        driver.get("file:///C:/Users/edz/Desktop/testhtml/exam/index.html");

        /* 我想要为 页面上某一个元素添加显示等待 需要使用 WebDriverWait 类 */
        /**
         * driver:代表浏览器
         * 10：代表等待元素的时间范围
         * 1：是搜索某个元素的时间的间隔，有一个默认值 0.5
         */
        WebDriverWait webDriverWait = new WebDriverWait(driver, 10, 1);
        /* 定位 网页中 继续提供房源信息 */
        /* 在 WebDriverWait 类中提供了一个 until方法来为元素添加 显示等待 */
        WebElement element = webDriverWait.until(new ExpectedCondition<WebElement>() {
            @Override
            public WebElement apply(WebDriver webDriver) {
                return driver.findElement(By.xpath("//a[@href='House.html']"));
            }  // alt + enter
        });

        element.click();
    }

    /* 隐式等待 */
    @Test
    public void t2() {
        driver.get("file:///C:/Users/edz/Desktop/testhtml/exam/index.html");

        /* 设置 隐式等待 */
        WebDriver.Timeouts timeouts = driver.manage().timeouts();
        /* 设置查找元素的等待最大时间为 30 秒 */
        timeouts.implicitlyWait(30, TimeUnit.SECONDS);
        /* 设置页面刷新的等待最大时间为 30 秒 */
        timeouts.pageLoadTimeout(30, TimeUnit.SECONDS);
        /* 设置异步脚本处理的等待最大时间为 30 秒 */
        timeouts.setScriptTimeout(30, TimeUnit.SECONDS);

        driver.findElement(By.xpath("//a[@href='House.html']")).click();

    }


    @AfterClass
    public void close() {
//        driver.quit();
    }
}
